昨天講了物件導向中的特性之一的封裝,今天要來看的是繼承與多型這兩個亦為物件導向程式設計中的兩個重要特性。
何謂繼承呢?
在物件導向的世界中,藉由讓子類別來繼承父類別,我們可以避免重複的實作與行為定義的現象。繼承基本上就是避免多個類別間定義了重複的行為。
讓我們來看一下以下的例子:
Public class Dog {
private String name;
private int age;
public void eat(){
System.out.println(“eat dog's food”)
}
public int getAge(){return age;}
public setAge(int age){
this.age = age;
}
}
Public class Cat{
private String name;
private int age;
public void eat(){
System.out.println(“eat cat's food”)
}
public int getAge(){return age;}
public setAge(int age){
this.age = age;
}
有沒有發現甚麼呢? 兩個class重複的方法相當的多,這種寫法雖然沒錯,但整個程式會相當的沒有效率。
這時候如果我們把重複的行為獨立出來,變成以下的結構:
Public class Animal{
private String name;
private int age;
public int getAge(){return age;}
public setAge(int age){
this.age = age;
}
Public class Dog extends Animal{
public void eat(){
System.out.println(“eat dog's food”)
}
}
Public class Cat extends Animal{
public void eat(){
System.out.println(“eat cat's food”)
}
}
透過extends就可以繼承父類別中的方法與變數囉~
另外,提到多型就不能不知道抽象類別,如果我們說類別代表了一種實體,如汽車 ( Car )。那抽象類別其實就是尚未建立完全的實體,如抽象車 (AbstractCar) 這個概念。例如我們來看一下以下的例子,以下可以看到,抽象類別可以自己實作屬性,亦可先宣告屬性再讓子類來實作或覆寫。因此,我們可以透過抽象類別定義相關的抽象方法,再讓子類別來實現。
abstract Class AbstractCar {
private int wheel = 4;
protected String powerUnit;
protected abstract void start();
}
Class Car extends AbstractCar{
protected void start() {
System.out.println("Car Started");
}
}
多型(Polymorphism) 是指在執行階段,物件能夠依照不同情況變換資料型態。
由於是抽象類別,所以我們不能透過抽象類別來建立實體,但我們可以透過多型的方式傳入對應型態建立物件—
AbstractCar test = new Car();
test.start();
這段程式碼的意思便是,以AbstractCar為基底宣告一個Car物件。
以上就是今天的內容,See u tomorrow。
Hi, I am Grant.
個人部落格 - https://grantliblog.wordpress.com/
個人網站 - https://grantli-website.netlify.app/#/mainpage
我的寫作專題 - https://vocus.cc/user/5af2e9b5fd89780001822db4#